package com.sheng.leetcode.year2022.month07.day04;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author liusheng
 * @date 2022/07/04
 *
 * 1200. 最小绝对差
 *
 * 给你个整数数组 arr，其中每个元素都 不相同。
 * 请你找到所有具有最小绝对差的元素对，并且按升序的顺序返回。
 *
 * 示例 1：
 * 输入：arr = [4,2,1,3]
 * 输出：[[1,2],[2,3],[3,4]]
 *
 * 示例 2：
 * 输入：arr = [1,3,6,10,15]
 * 输出：[[1,3]]
 *
 * 示例 3：
 * 输入：arr = [3,8,-10,23,19,-4,-14,27]
 * 输出：[[-14,-10],[19,23],[23,27]]
 *
 * 提示：
 * 2 <= arr.length <= 10^5
 * -10^6 <= arr[i] <= 10^6
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/minimum-absolute-difference
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LeetCode1200 {

    @Test
    public void test01(){
//        int[] arr = {4,2,1,3};
//        int[] arr = {1,3,6,10,15};
//        int[] arr = {3,8,-10,23,19,-4,-14,27};
        int[] arr = {34,-5,-24,60,2,-46};
        List<List<Integer>> lists = new Solution().minimumAbsDifference(arr);
        for (List<Integer> list : lists) {
            list.forEach(integer -> {
                System.out.print(integer + "\t");
            });
            System.out.println("");
        }
    }

}
class Solution {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        //排序
        Arrays.sort(arr);
        //min：最小绝对差
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < arr.length - 1; i++) {
            if ((arr[i + 1] - arr[i]) < min) {
                min = arr[i + 1] - arr[i];
            }
        }
        List<List<Integer>> lists = new ArrayList<>();
        for (int i = 0; i < arr.length - 1; i++) {
            //和最小绝对差相等时
            if ((arr[i + 1] - arr[i]) == min) {
                List<Integer> list = new ArrayList<>();
                list.add(arr[i]);
                list.add(arr[i + 1]);
                lists.add(list);
            }
        }
        return lists;
    }
}
